<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page import="java.net.URLDecoder"%>
<%@ page import="java.net.URLEncoder"%>
<%@ page import="java.io.*" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<body>
<%
 try{


  //아래 getServletContext().getRealPath("/") 는 서버의 절대 경로를 받아온다
  //String path = getServletContext().getRealPath("/");
  

request.setCharacterEncoding("UTF-8");

 String temps=request.getParameter("filePath");
 String filePath=new String(temps.getBytes("8859_1"),"UTF-8");



		String[] temp = filePath.split("\\\\");
		String fileName=temp[temp.length-1];
		File file=new File(filePath);
  
		
		
System.out.println("fileName:"+fileName);
  // page의 contentType 등등을 동적으로 바꾸기 위해서는 response를 다 날려버린다.
  // 띄어쓰기 등도 모두 초기화 된다.  
  response.reset();
  

  response.setContentType("application/octer-stream");
  // 일반파라미터 application/x-www-form-urlencoded 디폴트로 설정 되있다!
  // 파일은 다르기 때문에 response 값을 바꾼것임
  
  // 해더의 이름에 내가 원하는 전송할 파일 이름을 넣은 것임
  // 파일이름은 브라우저 설정 문자셋으로 바뀐것으로 넣는다! 
  response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(fileName, "utf-8") + ";");
  // 인코딩 설정값도 변경
  response.setHeader("Content-Transper-Encoding", "binary");
  // 사이즈도 알려줘야 한다

  response.setContentLength((int)file.length());
  // cache에 안 넣을 거다! 
  response.setHeader("Pargma", "no-cache");
  // Expires 는 또 무슨 뜻인가염 넹?!
  response.setHeader("Expires", "-1");
  
  byte[] data = new byte[1024 * 1024];
  BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file));
  // response가 사용하는 OutputStream()을 out 스트림으로 사용 
  BufferedOutputStream fos = new BufferedOutputStream(response.getOutputStream());
  
  int count = 0;
  while((count = fis.read(data)) != -1){
   fos.write(data);
  }
  
  if(fis != null) fis.close();
  if(fos != null) fos.close();
  
 }catch(Exception e){
  System.out.println("download error : " + e);
 }
 // jsp 에는 이미 내장객체로 out이 사용되고 있기 때문에 
 // outputstream을 사용하려면 비워 줘야 한다고 함! out.clear();
 // pageContext.pushBody() 이건 또 뭐란 말인가?
 out.clear();
 out = pageContext.pushBody();
%>
</body>
</head>

